# 生成器是根据程序员指定的算法循环生成数据，当条件不成立时生成数据就结束，不是一次性把数据生成
# 使用才生成，节约内存空间

# 创建方式一
# 生成器推导式,把列表生成器改为小括号
my_generator = (value * 2 for value in range(3))
print(my_generator)
# 生成器取值使用next关键字
# value1 =next(my_generator)
# print(value1)
# value2 =next(my_generator)
# print(value2)
# value3 =next(my_generator)
# print(value3)
# 当生成器没有值时，会抛出StopInteration
# 用while循环生成
# while True:
#     try:
#         value=next(my_generator)
#         print(value)
#     except Exception as e:
#         break

# 用for循环生成
for value in my_generator:
    # for循环调用next，当出现异常，for自动异常捕获
    print(value)


# 创建方式二
# 使用yield关键字
def my_gen():
    for i in range(3):
        print('生成前')
        # 执行到yield代码暂停，返回结果，再次启动会在暂停位置再执行
        yield i
        print('生成后')

gen=my_gen()
print(next(gen))
